﻿#define _CRT_SECURE_NO_WARNINGS 1

#include"Stack.h"

//C++输入输出
#include<iostream> //是标准的输⼊、输出流库
using namespace std;  //将命名空间中所有成员展开（不推荐）

////输出
//int main()
//{
//	int a = 5;
//	double b = 2.5;
//	char c = 'x';
//
//	cout << a << " " << b << " " << c << endl;
//	std::cout << a << " " << b << " " << c << endl;
//	return 0;
//}
//
////输入
//int main()
//{
//	int a = 5;
//	double b = 2.5;
//	char c = 'x';
//	
//	cin >> a >> b >> c;
//	cout << a << " " << b << " " << c << endl;
//
//	return 0;
//}


//缺省参数
//给形参a一个缺省值1，形参a即为缺省参数
void Fun(int a = 1)
{
	cout << a << endl;
 }

//全缺省
void Func(int a = 1, int b = 2,int c = 3)
{
	cout << a << " " << b << " " << c << endl;
}

//半缺省:C++规定半缺省参数必须从右往左依次连续缺省，不能间隔跳跃给缺省值。
void Fund(int a, int b = 8, int c = 9)
{
	cout << a << " " << b << " " << c << endl;
}

int main()
{
	Fun();
	Fun(5);

	Func();
	Func(4);
	Func(4, 5, 6);

	Fund(5);
	Fund(5, 6, 7);

	return 0;
}


//// 函数声明和定义分离时，缺省参数不能在函数声明和定义中同时出现，规定必须函数声明给缺省值。
//
//int main()
//{
//	ST s1;
//	STInit(&s1);
//	
//	//确定知道要插⼊1000个数据，初始化时⼀把开好，避免扩容
//	ST s2;
//	STInit(&s2, 1000);
//	return 0;
//}


//重载函数：C++⽀持在同⼀作⽤域中出现同名函数，但是要求这些同名函数的形参不同

//参数类型不同
int Add(int x,int y)
{
	cout << "Add(int x,int y)" << endl;
	return x + y;
}

double Add(double x, double y)
{
	cout << "Add(double x, double y)" << endl;
	return x + y;
}

//参数个数不同
void F()
{
	cout << "F()" << endl;
}

void F(int a)
{
	cout << "F(int a)" << endl;
}

//参数类型顺序不同
void Fun(int a, char b)
{
	cout << "Fun(int a, char b)" << endl;
}

void Fun(char a, int b)
{
	cout << "Fun(char a, int b)" << endl;
}


//int main()
//{
//	Add(5, 10);
//	Add(1.1, 2.2);
//
//	F();
//	F(10);
//
//	Fun(5, 'x');
//	Fun('x', 5);
//
//	return 0;
//}


//// 返回值不同不能作为重载条件，因为调⽤时也⽆法区分
//
//void fxx(int a)
//{}
//
//int fxx(int a)
//{
//	return 0;
//}


//// 下⾯两个函数构成重载
//// 但是f1()调⽤时，会报错，存在歧义，编译器不知道调用谁
//
//void f1()
//{
//     cout << "f()" << endl;
//}
//void f1(int a = 10)//缺省参数
//{
//	cout << "f(int a)" << endl;
//}
//
//int main()
//{
//	f1();
//	return 0;
//}
	

